package order

import (
	"gorm.io/gorm"
	"shop/database/mysql"
)

type Order struct {
	gorm.Model
	UserId        int    `json:"user-id" gorm:"type:int(11);"`
	CouponId      int    `json:"coupon-id" gorm:"type:int(11);"`
	OrderNo       string `json:"order-no" gorm:"type:varchar(30);"`
	Name          string `json:"title" gorm:"type:varchar(255);comment:收件人姓名"`
	Phone         string `json:"phone" gorm:"type:char(11);comment:收件人手机号码"`
	Address       string `json:"address" gorm:"type:varchar(255);comment:收件人地址"`
	Note          string `json:"note" gorm:"type:varchar(255);comment:备注"`
	Favorable     string `json:"favorable" gorm:"type:varchar(50);comment:优惠价格"`
	Amount        string `json:"amount" gorm:"type:varchar(50);"`
	PayType       int    `json:"pay-type" gorm:"type:tinyint(1);default:0;comment:支付宝 0 - 微信 1 - 余额 2"`
	CommentStatus bool   `gorm:"type:bool;comment:评论状态（0待审核1审核完成2审核失败）"`
	Status        int    `json:"status" gorm:"type:tinyint(1);comment:0 待付款;1 待发货;2 待收货;3 待评价;4 取消订单"`
}

// 创建订单
func (o *Order) AddOrder(orderGoods []*OrderGoods) error {
	return mysql.WithMysql(func(db *gorm.DB) error {
		for key := range orderGoods {
			orderGoods[key].OrderId = int(o.ID)
		}

		return db.Create(&orderGoods).Error
	})
}

// 更新状态
func (o *Order) OrderUpdateByStatus(orderId int) (*Order, error) {
	return o, mysql.WithMysql(func(db *gorm.DB) error {
		return db.Model(&o).Where("id", orderId).Updates(o).Error
	})
}

// 删除订单
func (o *Order) OrderDel(orderId int) (*Order, error) {
	return o, mysql.WithMysql(func(db *gorm.DB) error {
		return db.Model(&o).Where("id", orderId).Delete(&o).Error

	})
}

// 取消订单
func (o *Order) UpdStatus(orderId int) (*Order, error) {
	return o, mysql.WithMysql(func(db *gorm.DB) error {
		return db.Model(&o).Where("id", orderId).Update("status", 4).Error
	})
}

// 查询用户的订单详情
func (o *Order) UserByIdOrder(userId int) (info []*Order, err error) {
	return info, mysql.WithMysql(func(db *gorm.DB) error {
		return db.Model(&o).Where("user_id", userId).Find(&info).Error

	})
}

// 处理订单支付
func (o *Order) OrderUpd(orderId int) (*Order, error) {
	return o, mysql.WithMysql(func(db *gorm.DB) error {
		return db.Model(&o).Where("id = ?", orderId).Updates(o).First(&o).Error
	})
}

// 根据订单号查询订单数据
func (o *Order) OrderSearchByNo(no string) (*Order, error) {
	return o, mysql.WithMysql(func(db *gorm.DB) error {
		return db.Model(o).Where("order_no", no).First(&o).Error
		//return db.Debug().Model(o).Where("order_no", no).First(&o).Error
	})
}

// 查询订单及其商品
func (o *Order) OrderSearchByID(orderId int) (info *Order, err error) {
	return info, mysql.WithMysql(func(db *gorm.DB) error {
		return db.Model(&o).Where("id = ?", orderId).Find(&info).Error

	})
}
